package fanjingzhu.check.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import publics.model.Enterprise;
import publics.util.Page;
import fanjingzhu.check.dao.EnterpriseDao;
import fanjingzhu.check.service.EnterpriseService;
@Component("enterpriseService")
public class EnterpriseServiceImpl implements EnterpriseService{
	
	  EnterpriseDao enterpriseDao;
	  
  public EnterpriseDao getEnterpriseDao() {
			return enterpriseDao;
  }
  @Resource(name="enterpriseDao")
   public void setEnterpriseDao(EnterpriseDao enterpriseDao) {
			this.enterpriseDao = enterpriseDao;
			System.out.println("enterpriseDaoImpl inject in EnterpriseServiceImpl");
  }  
	
	public Object saveEnterprise(Enterprise enterprise) {
		return enterpriseDao.save(enterprise);
	}

	public boolean deleteEnterprise(Integer enterpriseId) {
		return enterpriseDao.deleteById(enterpriseId);
	}
	
	public boolean updateEnterprise(Enterprise enterprise) throws Exception {
		return enterpriseDao.update(enterprise);
	}
	
	public Enterprise findById(int enterpriseId) {
		return enterpriseDao.findById(enterpriseId);
		
	}
	/**
	 *根据id值分页查找企业相关信息 
	 *@return page
	 */
	public Page findByPageId(Page page,Integer enterpriseId) {
//		Page page=new Page();
		int pageSize = page.getLimit();
		int offset = page.getStart();//-1)*pageSize;
		String sql="from Enterprise e left join fetch e.applications where e.id="+enterpriseId;
		System.out.println("sql ="+sql);
		page.setRoot(enterpriseDao.findByPage(sql,offset,pageSize));//把查询结果放入root中
		page.setTotalProperty(enterpriseDao.findByCount(sql));   //把数据总数放入totalProperty中
		return page;
		
	}
	/**
	 * 
	 */
	public Page findByPage(Page page) {
		/*
		 * 这个模糊查询语句的生成请每个人仔细体会下
		 */	
		String sql = "from Enterprise e ";
		if(page.getConditions().size() > 0){//这里为模糊查询的 sql 语句拼接 请仔细体会
			sql = sql + " where ";  
			for(int i = 0; i < page.getConditions().size(); ){
				sql = sql + "( e.name like '%"+page.getConditions().get(i)+"%'"//查询条件一  公司名字字段
				+" or e.registerAddress like '%"+page.getConditions().get(i)+"%'"
				+" or e.contactName like '%"+page.getConditions().get(i)+"%' ) ";
				// 以上 在 四个字段搜索数据 ，这几个字段关系为 or 即或者的关系。理论上可以设置任意多字段，只需继续用 拼接。
				// 注意 语句中 有  ( ) 符号，在第一条 和最后一条一定要加上， 为什么要加上自己体会。
 				//以下为多条件的连续拼接， 为 and 的关系 。如果还是不能理解，请实践下，看看生成的sql语句是什么。
				i++;
				if(i < page.getConditions().size()){// 如果条件不止一个 进行连续拼接
					sql = sql + " and ";
				}
			}
		}
		System.out.println("sql ="+sql);// 测试用，请观察拼接出的sql语句，加强理解

		int pageSize = page.getLimit();
		int offset = page.getStart();//-1)*pageSize;
		page.setRoot(enterpriseDao.findByPage(sql,offset,pageSize));//把查询结果放入root中
		page.setTotalProperty(enterpriseDao.findByCount(sql));   //把数据总数放入totalProperty中
		return page;	
	}
	/**
	 * 
	 */
	public Enterprise findByUser(String user) {
		//未实现，在此补充！
		return null;
	}
	
	

	

	
	

}
